Conventionally, semiconductor memories, having memory cells that hold charge of an amount corresponding to data, are widely known. Data stored in a memory cell is determined on the basis of comparison between a voltage according to the amount of charge held by the memory cell and a preset read voltage. The amount of charge held by a memory cell varies with time and at each access. In order to prevent data from being changed caused by variation in the amount of charge, techniques for shifting the read voltage according to variation in the amount of charge have been developed.